CM77-最长合成字符串-【字符串】

一 题目描述

给定一个string数组str及其大小n。请编写一段代码找出该数组中最长的那个字符串,且要求该字符串能由数组中其他的字符串组成(使用的字符串可重复)。请返回满足要求的最长字符串的长度,保证题意所述的最长单词存在。

 测试样例:  ["a","b","c","ab","bc","abc"],6

 返回:3

二 题解

先将字符串数组根据字符串长度进行递减排序,然后遍历字符串数组,对当前字符串首先判断其是否能由数组中其它字符串组成,如果能,返回当前字符串长度,不能返回-1。

class LongestString {
public:
	void printstr(vector<string> str,int n)
	{
		for (int i = 0; i < n; i++) {
			cout << str[i] << " ";
		}
		cout << endl;
	}

	static bool cmp(string str1, string str2)
	{
		return str1.size() > str2.size();
	}
	int getLongest(vector<string> str, int n) {
		// write code here
		//["a", "b", "c", "ab", "bc", "abc"], 6
		sort(str.begin(), str.end(), cmp); //cmp函数必须是static函数
		printstr(str, n);//abc ab bc a b c
		for (int i = 0; i < n; ++i)
		{
			string temp = str[i];
			int x;
			for (int j = i + 1; j < n; ++j)
			{
				cout << "x=" << temp.find(str[j]) << endl;//查找子串str[j]在字符串temp中的位置
				while ((x = temp.find(str[j])) != -1) //字符串temp中存在子串时,4294967295 == -1
				{//用while不用if,是存在["glhz","ddthddth","ddth"]这种情况
					temp.erase(x, str[j].size());//从字符串中删除子串
					cout << "temp :" << temp << endl;
				}
			}
			if (temp.empty()) return str[i].size();
		}
		return -1;
	}

};

int main()
{

	vector<string> str = { "a", "b", "c", "ab", "bc", "abc" };
	LongestString obj2;
	obj2.getLongest(str,6);
	return 0;
}

string中find(str)函数用于查找子串str在string中是否出现,如果出现,返回下标,否则返回特定的数,这个数是4294967295,测试发现与-1相等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值