昆明网站建设 熊掌号,网络管理服务器,企业网站选择第三方还是自己做,ui交互设计师主要做什么的目录 题目 思路
注意事项
C代码 题目
Description 龙龙在研究字符串和字符串处理。龙龙发现有一些字符串让他第一眼看到就会发自内心的感到快乐#xff0c;他把这些字符串称为“肥宅快乐串。龙龙进一步研究发现#xff0c;一个字符串是肥宅快乐串#…目录 题目 思路
注意事项
C代码 题目
Description 龙龙在研究字符串和字符串处理。龙龙发现有一些字符串让他第一眼看到就会发自内心的感到快乐他把这些字符串称为“肥宅快乐串。龙龙进一步研究发现一个字符串是肥宅快乐串当且仅当这个字符串存在至少一个子串是fattyhappy。字符串的子串是指这个字符串中截下来的连续的一段。比如fffffattyhappyyyyy就有一个fattyhappy子串而faaaaattyhappy就没有一个fattyhappy子串。现在龙龙看到了好多个字符串他想对每一个字符串交换恰好一对字符的位置使得这个字符串变成肥宅快乐串。请注意必须进行一次交换不允许不交换。龙龙真的很想见到肥宅快乐串请你帮帮龙龙吧告诉他应该交换字符串里哪两个位置的字符。 Input 输入共有 行其中 表示需要你进行操作的字符串个数 第一行一个正整数 接下来第 到第 行每行输入一个字符串表示需要你帮忙变成肥宅快乐串的原来的字符串一共有 行。 Output 输出 行表示这 个字符串的交换方案。对于每个字符串如果有解输出两个数 表示交换字符串的第 个和第 个字符。否则输出一个数 表示没有方案。如果有多种方法使得它变成肥宅快乐串输出任意一种即可。 Note 所有数据保证 。即单个字符串长度不超过 所有字符串总长度不超过 。保证字符串中只有小写字母出现。
测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 5↵fafttyhappy↵fiftyhappy↵fattyahppy↵fattypahpy↵pattyhafpy↵以文本方式显示 2 3↵-1↵6 7↵6 8↵1 8↵1秒64M0 思路
用两个for循环嵌套比较每一次输入的连续字符串子串和fattyhappy用count记录字母数 若count0即找寻到与fattyhappy一致的连续子串直接交换内部两个t即可 若count1即找寻到的连续子串相差一个字母则从其他位置搜寻正确的字母与其交换若count2即相差两个字母需检查两者交换后能否成为fattyhappy 若count2可以直接跳出内循环从下一个字母开始搜索。 重复以上两步直到找到符合要求的交换或搜寻结束为止。
注意事项
用count记录不同字符数index1和index2记录当前不一样字符在字符串中的下标ch1和ch2记录在肥宅快乐串中需要的字符flag作为是否已经找到子串的标志。记得在合适位置初始化。for的外循环i的边界至少是s.size()-9即i至少得遍历到倒数第十个数。注意索引下标与位置的区别位置索引下标1当count为2时应判断s[index1] ch2 s[index2] ch1是否成立而不是判断ch1ch2是否成立只需要一组答案因此得到结果后就可以break
C代码
#includeiostream
#includestring
using namespace std;int main()
{int T, count 0;string str fattyhappy;cin T;while (T--){string s;cin s;int flag 0;//flag作为可否得到肥宅快乐串的标志符for (int i 0; i s.size() - 9; i){//记得每次循环要初始化int count 0, index1, index2;char ch1, ch2;for (int j 0; j 10; j) //对每一个i往后遍历找十个字符与肥宅快乐串对应字符作比较 if (s[i j] ! str[j]) {//出现不一样的字符if (count 0){ch1 str[j]; //存取需要的字符 index1 i j; //记录原来的字符位置 count;}else if (count 1){count;ch2 str[j];//存取需要的字符index2 i j; //记录原来的字符位置 }else if (count 1)count;}if (count 0) //无不同则在原本字符串内交换 {cout i 4 i 3 endl; //此时的i即为fattyhappy的第一个字符 flag 1;break;}else if (count 1) //一个不同从10个之外的字符里找符合要求的 {for (int k 0; k s.size(); k){if (k i){k 10; continue;}if (s[k] ch1){cout k 1 index1 1 endl;flag 1;break;}}if (flag 1) break;}else if (count 2) //两个不同如果彼此交换得到肥宅快乐串即可 {if ({cout index1 1 index2 1 endl;flag 1;break;}}else continue; //不同字符大于2怎样更换都无法满足条件 继续寻找 }if (flag 0) cout -1 endl; //遍历了整个字符串字串依然没有找到符合的情况 }return 0;
}